/*
 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package com.oracle.max.vm.ext.vma;

import com.sun.max.vm.actor.member.*;

/**
 * The VM executes an (extended) bytecode instruction set and the execution can be subject to advice,
 * specified by the methods below.
 *
 * Auto-generated by {@link BytecodeAdviceGenerator}.
 */

public abstract class BytecodeAdvice {

// START GENERATED CODE
// EDIT AND RUN BytecodeAdviceGenerator.main() TO MODIFY

    public abstract void adviseBeforeConstLoad(int bci, Object value);

    public abstract void adviseBeforeConstLoad(int bci, long value);

    public abstract void adviseBeforeConstLoad(int bci, float value);

    public abstract void adviseBeforeConstLoad(int bci, double value);

    public abstract void adviseBeforeLoad(int bci, int index);

    public abstract void adviseBeforeArrayLoad(int bci, Object array, int index);

    public abstract void adviseBeforeStore(int bci, int index, long value);

    public abstract void adviseBeforeStore(int bci, int index, float value);

    public abstract void adviseBeforeStore(int bci, int index, double value);

    public abstract void adviseBeforeStore(int bci, int index, Object value);

    public abstract void adviseBeforeArrayStore(int bci, Object array, int index, long value);

    public abstract void adviseBeforeArrayStore(int bci, Object array, int index, float value);

    public abstract void adviseBeforeArrayStore(int bci, Object array, int index, double value);

    public abstract void adviseBeforeArrayStore(int bci, Object array, int index, Object value);

    public abstract void adviseBeforeStackAdjust(int bci, int opcode);

    public abstract void adviseBeforeOperation(int bci, int opcode, long op1, long op2);

    public abstract void adviseBeforeOperation(int bci, int opcode, float op1, float op2);

    public abstract void adviseBeforeOperation(int bci, int opcode, double op1, double op2);

    public abstract void adviseBeforeConversion(int bci, int opcode, long op);

    public abstract void adviseBeforeConversion(int bci, int opcode, float op);

    public abstract void adviseBeforeConversion(int bci, int opcode, double op);

    public abstract void adviseBeforeIf(int bci, int opcode, int op1, int op2, int targetBci);

    public abstract void adviseBeforeIf(int bci, int opcode, Object op1, Object op2, int targetBci);

    public abstract void adviseBeforeGoto(int bci, int targetBci);

    public abstract void adviseBeforeReturn(int bci, long value);

    public abstract void adviseBeforeReturn(int bci, float value);

    public abstract void adviseBeforeReturn(int bci, double value);

    public abstract void adviseBeforeReturn(int bci, Object value);

    public abstract void adviseBeforeReturn(int bci);

    public abstract void adviseBeforeGetStatic(int bci, Object staticTuple, FieldActor f);

    public abstract void adviseBeforePutStatic(int bci, Object staticTuple, FieldActor f, double value);

    public abstract void adviseBeforePutStatic(int bci, Object staticTuple, FieldActor f, Object value);

    public abstract void adviseBeforePutStatic(int bci, Object staticTuple, FieldActor f, float value);

    public abstract void adviseBeforePutStatic(int bci, Object staticTuple, FieldActor f, long value);

    public abstract void adviseBeforeGetField(int bci, Object object, FieldActor f);

    public abstract void adviseBeforePutField(int bci, Object object, FieldActor f, double value);

    public abstract void adviseBeforePutField(int bci, Object object, FieldActor f, Object value);

    public abstract void adviseBeforePutField(int bci, Object object, FieldActor f, float value);

    public abstract void adviseBeforePutField(int bci, Object object, FieldActor f, long value);

    public abstract void adviseBeforeInvokeVirtual(int bci, Object object, MethodActor methodActor);

    public abstract void adviseBeforeInvokeSpecial(int bci, Object object, MethodActor methodActor);

    public abstract void adviseBeforeInvokeStatic(int bci, Object object, MethodActor methodActor);

    public abstract void adviseBeforeInvokeInterface(int bci, Object object, MethodActor methodActor);

    public abstract void adviseBeforeThrow(int bci, Object object);

    public abstract void adviseBeforeCheckCast(int bci, Object object, Object classActor);

    public abstract void adviseBeforeInstanceOf(int bci, Object object, Object classActor);

    public abstract void adviseBeforeMonitorEnter(int bci, Object object);

    public abstract void adviseBeforeMonitorExit(int bci, Object object);

    public abstract void adviseAfterLoad(int bci, int index, Object value);

    public abstract void adviseAfterArrayLoad(int bci, Object array, int index, Object value);

    public abstract void adviseAfterNew(int bci, Object object);

    public abstract void adviseAfterNewArray(int bci, Object object, int length);

    public abstract void adviseAfterArrayLength(int bci, Object array, int length);

    public abstract void adviseAfterMultiNewArray(int bci, Object object, int[] lengths);

    public abstract void adviseAfterMethodEntry(int bci, Object object, MethodActor methodActor);

// END GENERATED CODE
}

